package Thread.Thread_Security;
import java.util.Scanner;
public class Demo27 {
    public static Object locker= new Object();
    public static void main(String[] args) {
        Thread t1=new Thread(()->{
            synchronized (locker){
                System.out.println("t1 wait之前");
                try {
                    locker.wait();
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
                System.out.println("t1 wait之后");
            }
        });
        //notify中，也是需要先加锁才能执行
        Thread t2=new Thread(()->{
            System.out.println("t2 notify 之前");
            Scanner sc=new Scanner(System.in);
            sc.next();
            //此处用户输入什么都无所谓，目的是借助这个next输入构造一个“阻塞”的现象
            synchronized (locker){
                locker.notify();//务必确保是同一个锁对象，才能正常通知到
            }
            //同wait操作一样，notify也需要先获取到锁之后才能进行相关的操作
            //先持有锁才能够谈释放锁！
            System.out.println("t2 notify 之后");
        });
        t1.start();
        t2.start();
    }
}
